Compito 11 gennaio 2013 #include #include struct EL {int info; struct EL *next;}; typedef struct EL Lista; typedef Lista *Plista; typedef enum {false, true} boolean; int sommaintdisp(int n, int m){ if(m<=n){ if(n%m==0){ if(m%2==1){ return m+sommaintdisp(n, m+1); } else return sommaintdisp(n, m+1); } else return sommaintdisp(n, m+1); } return 0; } Plista crealista(int n){ int num, i; Plista aux, lista; if(n==0) return NULL; printf("Inserisci intero:\n"); scanf("%d", &num); lista=malloc(sizeof(Lista)); lista->info=num; aux=lista; i=1; while(inext=malloc(sizeof(Lista)); aux=aux->next; aux->info=num; i++; } aux->next=NULL; return lista; } void stampaRic(Plista lista){ if(lista!=NULL) { printf("%d ", lista->info); stampaRic(lista->next); } else printf("//\n"); } void canc1(Plista *lista){ Plista aux; if(*lista!=NULL) { aux=*lista; (*lista)=(*lista)->next; free(aux); } } int occ(Plista *lista, int n){ int occo=0; if(*lista!=NULL) { if((*lista)->info==n) occo++; return (occo + occ((&(*lista)->next), n)); } else return 0; } void intreccianew(Plista *l1, Plista *l2){ Plista aux, bux; aux=(*l1); bux=(*l2); if(aux->next!=NULL && bux->next!=NULL){ if((*l1)->info==(*l2)->info) canc1(&(*l2)); aux=(*l1)->next; (*l1)->next=*l2; bux=(*l2)->next; while(aux->next!=NULL && bux->next!=NULL){ (*l2)->next=aux; *l2=(*l2)->next; aux=aux->next; (*l2)->next=bux; *l2=(*l2)->next; bux=bux->next; } if(aux->next==NULL && bux->next!=NULL){ (*l2)->next=aux; *l2=(*l2)->next; (*l2)->next=bux; *l2=(*l2)->next; } if(aux->next!=NULL && bux->next==NULL){ (*l2)->next=aux; *l2=(*l2)->next; aux=aux->next; (*l2)->next=bux; *l2=(*l2)->next; (*l2)->next=aux; } if(aux->next==NULL && bux->next==NULL){ (*l2)->next=aux; *l2=(*l2)->next; (*l2)->next=bux; *l2=(*l2)->next; bux=bux->next; } } else if((*l1)->next!=NULL && (*l2)->next==NULL){ aux=(*l1)->next; (*l1)->next=*l2; (*l2)->next=aux; } else if((*l1)->next==NULL && (*l2)->next!=NULL){ (*l1)->next=*l2; bux=(*l2)->next; } else if((*l1)->next==NULL && (*l2)->next==NULL){ (*l1)->next=*l2; } } int main(){ /* 1 int n, ris1, ris2; printf("dammi n\n"); scanf("%d", &n); ris1=Divide(n, n); ris2=sommaintdisp(n, 1); printf("la somma e': %d\n", ris1); printf("la somma e': %d\n", ris2); printf("%d", 15%1); */ Plista lista1, lista2; int n, x, ris; printf("numero elementi:\n"); scanf("%d", &n); lista1=crealista(n); stampaRic(lista1); printf("numero elementi:\n"); scanf("%d", &n); lista2=crealista(n); stampaRic(lista2); intreccianew(&lista1, &lista2); stampaRic(lista1); printf("valore da cercare:\n"); scanf("%d", &x); ris=occ(&lista1, x); printf("compare %d volte\n", ris); return 0; }